// utils/streamRequest.js

// export function postStreamText({
//   query,
//   user = 'abc-123',
//   conversation_id = '',
//   inputs = {},
//   files = [],
//   onMessage,
//   onComplete,
//   onError
// }) {
//   const token = "app-6CJEzmt9zBZDbmiyVX0nX1pI"

//   let fullAnswer = ''
//   const socketTask = wx.connectSocket({
//     url: "ws://192.168.1.2/v1/chat-stream", // ✅ 请确保后端开放 WebSocket 接口
//     header: {
//       'Authorization': `Bearer ${token}`
//     },
//     method: "GET", // WebSocket 默认是 GET 握手
//     success() {
//       console.log("✅ WebSocket 已连接")
//     },
//     fail(err) {
//       console.error("❌ WebSocket 连接失败：", err)
//       onError && onError(err)
//     }
//   })

//   socketTask.onOpen(() => {
//     const payload = {
//       query,
//       user,
//       conversation_id,
//       inputs,
//       files
//     }
//     socketTask.send({
//       data: JSON.stringify(payload),
//       success() {
//         console.log("?? 发送消息成功")
//       },
//       fail(err) {
//         console.error("❌ 消息发送失败：", err)
//         onError && onError(err)
//       }
//     })
//   })

//   socketTask.onMessage((res) => {
//     const data = res.data.trim()
//     // 处理形如 "data: {...}" 的消息格式
//     const cleanLine = data.replace(/^data:\s*/, '').trim()
//     if (cleanLine) {
//       try {
//         const json = JSON.parse(cleanLine)
//         if (json.answer) {
//           onMessage && onMessage(json.answer)
//           fullAnswer += json.answer
//         }
//       } catch (e) {
//         console.warn("❌ JSON 解析失败：", cleanLine)
//       }
//     }
//   })

//   socketTask.onClose(() => {
//     console.log("✅ WebSocket 已关闭")
//     onComplete && onComplete(fullAnswer)
//   })

//   socketTask.onError((err) => {
//     console.error("❌ WebSocket 错误：", err)
//     onError && onError(err)
//   })

//   return socketTask
// }



import request from "../../utils/requestAI"

// 发送对话
export function posttext(dhdata) {
  return request({
    url: "/chat-messages",
    method: "POST",
    data: {  // 确保包含所有必需字段
      ...dhdata,  // 展开原有的dhdata对象
      response_mode: dhdata.response_mode || "blocking", // 确保有默认值
      user: dhdata.user || "abc-123" // 确保有默认用户ID
    }
  })
}
export function posttextimg(dhdata) {
	return request({
		url: "/chat-messages",
		method: "POST",
		data: {
			"inputs": {
				"files": {
					"type": "image",
					"transfer_method": "local_file",
					"upload_file_id": dhdata.dhimg
				}
			},
			"query": dhdata.query,
			"response_mode": "blocking",
			"conversation_id": "",
			"user": "abc-123"
		}
	})
}



// 上传图片



export function uploadImage(data) {
  const filePath = data.file
  const user = data.user || 'abc-123'

  return new Promise((resolve, reject) => {
    uni.uploadFile({
      url:  "http://26.74.106.213/v1/files/upload",
      filePath,
      name: 'file',
      formData: { user },
      header: {
        'Authorization': `Bearer app-ac7wp7kNGYoRjWFpjzP9d7bC` // 模拟 request 中注入的 token
      },
      success: (res) => {
        try {
          const result = JSON.parse(res.data)
          if (result && (result.id || result.url)) {
            resolve(result)
          } else {
            reject({ msg: '上传返回数据异常', raw: result })
          }
        } catch (e) {
          uni.showToast({ title: '数据解析失败', icon: 'none' })
          reject({ code: 500, msg: '上传返回格式错误' })
        }
      },
      fail: (err) => {
        uni.showToast({ title: '上传失败', icon: 'none' })
        reject(err)
      }
    })
  })
}
//不含图片的对话

export function requestTask(datare, onMessage) {
	let chunkBuffer = ''; // 缓存未解析的流数据

	const request = uni.request({
		url: 'http://26.74.106.213/v1/chat-messages',
		method: "post",
		header: {
			'Authorization': `Bearer app-ac7wp7kNGYoRjWFpjzP9d7bC`
		},
		enableChunked: true,
		responseType: 'arraybuffer',
		data: datare,
		success: (res) => {
			console.log("请求完成", res);
		}
	});

	request.onChunkReceived((res) => {
		try {
			// 解码 ArrayBuffer -> 字符串（使用 apply 优化）
			const uint8Arr = new Uint8Array(res.data);
			let decoded = '';

			if (uint8Arr.length < 65536) {
				decoded = String.fromCharCode.apply(null, uint8Arr);
			} else {
				// 超过上限则 fallback（安全处理）
				decoded = Array.from(uint8Arr).map(b => String.fromCharCode(b)).join('');
			}

			// 缓存追加到 chunkBuffer
			chunkBuffer += decoded;

            // 根据分隔符拆分（注意末尾可能是未完成的）
			let parts = chunkBuffer.split('\n\n');

			// 最后一段可能是不完整的，先保存，不处理
			chunkBuffer = parts.pop();

			// 逐段处理完整数据
			parts.forEach(item => {
				if (!item.trim().startsWith('data:')) return;

				try {
					const jsonStr = item.replace(/^data:\s*/, '');
					const parsed = JSON.parse(jsonStr);

					if (parsed.event === 'message_end') {
						onMessage("streamingEND");
					}

					const answerChunk = parsed.answer || '';
					if (answerChunk && typeof onMessage === 'function') {
						onMessage(answerChunk);
					}
				} catch (err) {
					console.error('解析流数据出错（单段错误）:', err, item);
				}
			});
		} catch (err) {
			console.error('处理 chunk 错误:', err);
		}
	});
}

// export function requestTask(datare, onMessage) {
// 	const request = uni.request({
// 		url: 'http://26.74.106.213/v1/chat-messages', 
// 		method: "post",
// 		header: {
// 			'Authorization': `Bearer app-ac7wp7kNGYoRjWFpjzP9d7bC`
// 		},
// 		enableChunked: true,
// 		responseType: 'text',
// 		data: datare,
// 		success: (res) => {
// 			console.log("请求完成", res);
// 		}
// 	});

// 	request.onChunkReceived((res) => {
// 		const uint8Array = new TextDecoder('utf-8');
// 		const decodedString = uint8Array.decode(res.data);
// 		const dataList = decodedString.split('\n\n');

// 		dataList.forEach((item) => {
// 			// 跳过空行
// 			if (!item.trim().startsWith('data:')) return;

// 			try {
				
// 				// 去掉前缀 "data: "
// 				const jsonStr = item.replace(/^data:\s*/, '');
// 				const parsed = JSON.parse(jsonStr);
// 				if (parsed.event === 'message_end') {
// 					onMessage("streamingEND");
					
// 				 }
// 				// 提取 answer 字段
// 				const answerChunk = parsed.answer || '';
// 				if (answerChunk && typeof onMessage === 'function') {
// 					onMessage(answerChunk); // 实时发送给页面
// 				}
// 			} catch (err) {
// 				console.error('解析流数据出错:', err, item);
// 			}
// 		});
// 	});
// }
//含图片的对话（本地图片）
export function requestTaskIMG(datare, onMessage) {
	let chunkBuffer = ''; // 缓存未解析的流数据

	const request = uni.request({
		url: 'http://26.74.106.213/v1/chat-messages',
		method: "post",
		header: {
			'Authorization': `Bearer app-ac7wp7kNGYoRjWFpjzP9d7bC`
		},
		enableChunked: true,
		responseType: 'arraybuffer',
		data: {
			"inputs": {
				"files": {
					"type": "image",
					"transfer_method": "local_file",
					"upload_file_id": datare.dhimg
				}
			},
			"query": datare.query,
			"response_mode": datare.response_mode,
			"conversation_id": "",
			"user": "abc-123"
		},
		success: (res) => {
			console.log("请求完成", res);
		}
	});

	request.onChunkReceived((res) => {
		try {
			const uint8Arr = new Uint8Array(res.data);
			let decoded = '';

			if (uint8Arr.length < 65536) {
				decoded = String.fromCharCode.apply(null, uint8Arr);
			} else {
				decoded = Array.from(uint8Arr).map(b => String.fromCharCode(b)).join('');
			}

			// 追加解码内容到缓存
			chunkBuffer += decoded;

			// 拆分出完整的数据段
			const parts = chunkBuffer.split('\n\n');
			chunkBuffer = parts.pop(); // 剩下可能是未完成的

			parts.forEach(item => {
				if (!item.trim().startsWith('data:')) return;

				try {
					const jsonStr = item.replace(/^data:\s*/, '');
					const parsed = JSON.parse(jsonStr);

					if (parsed.event === 'message_end') {
						onMessage("streamingEND");
					}

					const answerChunk = parsed.answer || '';
					if (answerChunk && typeof onMessage === 'function') {
						onMessage(answerChunk);
					}
				} catch (err) {
					console.error('解析流数据出错（单段错误）:', err, item);
				}
			});
		} catch (err) {
			console.error('处理 chunk 错误:', err);
		}
	});
}
// export function requestTaskIMG(datare, onMessage) {
// 	const request = uni.request({
// 		url: 'http://26.74.106.213/v1/chat-messages', 
// 		method: "post",
// 		header: {
// 			'Authorization': `Bearer app-ac7wp7kNGYoRjWFpjzP9d7bC`
// 		},
// 		enableChunked: true,
// 		responseType: 'text',
// 		data: {
// 			"inputs": {
// 				"files": {
// 					"type": "image",
// 					"transfer_method": "local_file",
// 					"upload_file_id": datare.dhimg
// 				}
// 			},
// 			"query": datare.query,
// 			"response_mode": datare.response_mode,
// 			"conversation_id": "",
// 			"user": "abc-123"
// 		},
// 		success: (res) => {
// 			console.log("请求完成", res);
// 		}
// 	});

// 	request.onChunkReceived((res) => {
// 		const uint8Array = new TextDecoder('utf-8');
// 		const decodedString = uint8Array.decode(res.data);
// 		const dataList = decodedString.split('\n\n');
	
// 		dataList.forEach((item) => {
// 			// 跳过空行
// 			if (!item.trim().startsWith('data:')) return;
	
// 			try {
				
// 				// 去掉前缀 "data: "
// 				const jsonStr = item.replace(/^data:\s*/, '');
// 				const parsed = JSON.parse(jsonStr);
// 				if (parsed.event === 'message_end') {
// 					onMessage("streamingEND");
					
// 				 }
// 				// 提取 answer 字段
// 				const answerChunk = parsed.answer || '';
// 				if (answerChunk && typeof onMessage === 'function') {
// 					onMessage(answerChunk); // 实时发送给页面
// 				}
// 			} catch (err) {
// 				console.error('解析流数据出错:', err, item);
// 			}
// 		});
// 	});
// }

//含图片的对话（网络图片）
export function requestTaskIMGint(datare, onMessage) {
	let chunkBuffer = ''; // 缓存未解析的流数据

	const request = uni.request({
		url: 'http://26.74.106.213/v1/chat-messages',
		method: "post",
		header: {
			'Authorization': `Bearer app-ac7wp7kNGYoRjWFpjzP9d7bC`
		},
		enableChunked: true,
		responseType: 'arraybuffer',
		data: {
			"inputs": {
				"files": {
					"type": "image",
					"transfer_method": "remote_url",
					"url": datare.dhimg
				}
			},
			"query": datare.query,
			"response_mode": datare.response_mode,
			"conversation_id": "",
			"user": "abc-123"
		},
		success: (res) => {
			console.log("请求完成", res);
		}
	});

	request.onChunkReceived((res) => {
		try {
			const uint8Arr = new Uint8Array(res.data);
			let decoded = '';

			if (uint8Arr.length < 65536) {
				decoded = String.fromCharCode.apply(null, uint8Arr);
			} else {
				decoded = Array.from(uint8Arr).map(b => String.fromCharCode(b)).join('');
			}

			// 追加解码内容到缓存
			chunkBuffer += decoded;

			// 拆分出完整的数据段
			const parts = chunkBuffer.split('\n\n');
			chunkBuffer = parts.pop(); // 剩下可能是未完成的

			parts.forEach(item => {
				if (!item.trim().startsWith('data:')) return;

				try {
					const jsonStr = item.replace(/^data:\s*/, '');
					const parsed = JSON.parse(jsonStr);

					if (parsed.event === 'message_end') {
						onMessage("streamingEND");
					}

					const answerChunk = parsed.answer || '';
					if (answerChunk && typeof onMessage === 'function') {
						onMessage(answerChunk);
					}
				} catch (err) {
					console.error('解析流数据出错（单段错误）:', err, item);
				}
			});
		} catch (err) {
			console.error('处理 chunk 错误:', err);
		}
	});
}
// export function requestTaskIMGint(datare, onMessage) {
// 	const request = uni.request({
// 		url: 'http://26.74.106.213/v1/chat-messages', 
// 		method: "post",
// 		header: {
// 			'Authorization': `Bearer app-ac7wp7kNGYoRjWFpjzP9d7bC`
// 		},
// 		enableChunked: true,
// 		responseType: 'text',
// 		data: {
// 			"inputs": {
// 				"files": {
// 					"type": "image",
// 					"transfer_method": "remote_url",
// 					"url": datare.dhimg
// 				}
// 			},
// 			"query": datare.query,
// 			"response_mode": datare.response_mode,
// 			"conversation_id": "",
// 			"user": "abc-123"
// 		},
// 		success: (res) => {
// 			console.log("请求完成", res);
// 		}
// 	});

// 	request.onChunkReceived((res) => {
// 		const uint8Array = new TextDecoder('utf-8');
// 		const decodedString = uint8Array.decode(res.data);
// 		const dataList = decodedString.split('\n\n');
	
// 		dataList.forEach((item) => {
// 			// 跳过空行
// 			if (!item.trim().startsWith('data:')) return;
	
// 			try {
				
// 				// 去掉前缀 "data: "
// 				const jsonStr = item.replace(/^data:\s*/, '');
// 				const parsed = JSON.parse(jsonStr);
// 				if (parsed.event === 'message_end') {
// 					onMessage("streamingEND");
					
// 				 }
// 				// 提取 answer 字段
// 				const answerChunk = parsed.answer || '';
// 				if (answerChunk && typeof onMessage === 'function') {
// 					onMessage(answerChunk); // 实时发送给页面
// 				}
// 			} catch (err) {
// 				console.error('解析流数据出错:', err, item);
// 			}
// 		});
// 	});
// }

// export function requestTask(datare){
// 	console.log()
// 	return uni.request({
// 	  url: 'http://26.74.106.213/v1/chat-messages',
// 	  method: 'post',
// 	  header: {
// 	    'Authorization': `Bearer app-ac7wp7kNGYoRjWFpjzP9d7bC` // 模拟 request 中注入的 token
// 	  },
// 	  enableChunked: true,  // 启用分块传输
// 	  responseType: 'text', // 响应类型为文本
// 	  data: datare,
// 	  success: (res) => {
// 	    console.log(res, '文本');
// 	  },
// 	  fail: (err) => {
// 	    console.error('请求失败:', err);
// 	  }
// 	})
// }

 
// 处理流式输出
// requestTask.onChunkReceived((res) => {
//   this.xianshi_tt = false
//    //用来解析
//   let uint8Array = new TextDecoder('utf-8')
//   let decodedString = uint8Array.decode(res.data)
//   let dataList = decodedString.split('\n\n')
//   dataList.forEach((item) => {
//     if (item) {
//       let gg = JSON.parse(item.replace('data:', ''));
// 	  console.log(gg)
//       let content = gg.choices[0].reasoning_content;
//       // 检查 content 是否有效并且不为空
//       if (content && content !== "" && content !== undefined) {
//         // 检查 content 是否已经存在于 streamData 中，防止重复
//         if (!this.streamData.includes(content)) {
//           this.streamData.push(content);
//         }
//       }
//     }
//   })
//   // 转换数组为字符串
//   this.wenan_content = this.streamData.join(''); // 将数组转化为换行分隔的字符串
// });
